

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
        // 面向对象 把具体的事物抽象   抽象方法和属性    先抽象一具体对象 然后再实例一下 
        // 封装  继承  多态  唯一
        
        // 封装对象  猫的对象   人的对象  商品的对象 
        
        // 通过定义构造函数 来封装对象 
        // 抽象化对象  this代表抽象 
        function  Cat(name,color){
            // this 抽象代名词   
            this.name = name; 
            this.color = color;
            this.type = "cat";
            this.call = function(){
                console.log("喵喵~")
            }
            this.skill = function(){
                console.log("抓老鼠~")   // 违背了 面向对象的本意 => 抽象 => 不建议写具体 
            }
            this.say = function(){
                console.log(this.name , this.color);
            }
        }

        var  cat1 = new Cat("Feifei","green");  // 实例化  this=>cat1
        console.log(cat1.name)
        console.log(cat1.color)
        console.log(cat1.type)
        cat1.call()
        cat1.skill()
        cat1.say()   
        console.log(cat1,cat1 instanceof Cat);  // cat1 在 Cat 对象实例出来  cat1==Cat
        
        
        var  cat2 = new Cat("Lucy","灰色");  // 实例化  this=>cat2
        
        // cat1 实例对象 
        console.log(cat2.name);
        console.log(cat2.color);
        console.log(cat2.type);
        cat2.call()
        cat2.skill()
        cat2.say()   


    </script>
</body>
</html>